package com.htjc.integral.conversion.service;

import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import com.htjc.integral.model.conversion.EcBpMemberDetail;


public interface IEcIntegralDetailService {

	/**
	 * 用于实现在购物环节产生的积分处理，它包括了积分赠送和积分兑换（消费积分）两种情况，
	 * 积分赠送时，传人的积分值为正数，相反，积分兑换传人的积分值是负数。
	 * 
	 * @param numberId
	 *            会员Id
	 * @param orderId
	 *            订单Id（订单来源ID）
	 * @param integralOfOrder
	 *            商户产品积分值映射表, 其格式是Map&lt;MerchantId, Map&lt;ProductId,
	 *            正负积分值&gt;&gt;.
	 * @param originRemark
	 *            订单来源描述
	 * @param isPresent
	 *            判断是积分赠送还是积分兑换，true: 积分赠送; false: 积分兑换
	 */
//	void updateIntegralValueForShoping(HttpServletRequest request, String numberId, String orderId,
//			Map<String, Map<String, Integer>> integralOfOrder,
//			String originRemark, boolean isPresent);
//
//	/**
//	 * 用于实现在退货环节产生的积分处理，它包括了赠送积分的扣除和兑换积分的返还两种情况。
//	 * 
//	 * @param numberId
//	 *            会员Id
//	 * @param orderId
//	 *            订单Id（订单来源ID）
//	 * @param orderProds
//	 *            商户产品映射表, 其格式是Map&lt;MerchantId, List&lt;ProductId&gt;&gt;.
//	 * @param originRemark
//	 *            订单来源描述
//	 * @param isReturn
//	 *            判断是赠送积分的扣除还是兑换积分的返还，true: 兑换积分的返还; false: 赠送积分的扣除
//	 */
//	void updateIntegralValueForReturned(String numberId, String orderId,
//			Map<String, List<String>> orderProds, String originRemark,
//			boolean isReturn);
//	
//	/**
//	 * 依据会员Id，获得会员可用的积分值
//	 * @param numberId 会员Id
//	 * @return 积分值
//	 */
//	Integer queryAvailabelIntegralValue(String numberId);
//	Map<String, Integer> findIntegralByMemberId(String numberId);
//	
//	/**
//	 * 扣除积分添加全局锁，通用方法
//	 * @param userId
//	 * @param totalNum
//	 * @param lockKey
//	 * @param lockKeyBC 作为锁的补充，如果lockKey为空，则按这个生成新的lockKey
//	 * @param orderId
//	 * @return
//	 * @throws Exception
//	 */
//	String deductionIntegralAndGlobalLock(String userId,String totalNum,String lockKey
//			,String lockKeyBC,String orderId,String remark) throws Exception;
	
	//111
	/**
	 * 
	 * @author gmk
	 * @param isPresent 是否是赠送积分  true：赠送积分 false：扣减积分
	 * @param isReturn  是否是返还积分（将扣除的积分原路返回）true：返还积分 false：不返还 
	 * @param userMap  userId、totalNum、originId、remark、merchantId、scaleTrans、accIsNo参数
	 * @param sourceMap  bizCodeIdCreate、channelIdCreate、bizCodeIdConsume、channelIdConsume
	 * @return
	 * @throws Exception
	 */
	String changeIntegralAndGlobalLock(boolean isPresent
			,Map<String, Object>userMap,Map<String, String>sourceMap) throws Exception;


	/**
	 * 根据用户id查询用户可用积分(ec_bp_memberdetail)
	 * @author gmk
	 * @param userId
	 * @return
	 */
//	Integer getAvailabelIntegralById(String userId);
	
	/**
	 * 获取各种类型的积分
	 * @param userId
	 * @return totalValue:总积分 availableValue:可用积分 canNotValue:不可用积分
	 */
//	Map<String, Integer> getEveryIntegralById(String userId);
	
	/**
	 * 获取个人积分流水
	 * @param userId
	 * @return
	 */
//	List<EcBpMemberDetail> getEcBpMemberDetailList(String userId);
	
	/**
	 * 新获取个人积分流水wpj
	 */
//	List<EcBpMemberDetail> newGetEcBpMemberDetailList(String userId);
	/**
	 * 获取个人积分流水前三月的
	 * @param map
	 * @return
	 */
//	public List<EcBpMemberDetail> userIdDetailList(Map<String, String> map);
	
//	public List<EcBpMemberDetail> allGetMemberDetailList(String userId);
	
	/**
	 * 获取个人积分流水超过三月的
	 * @param map
	 * @return
	 */
//	public List<EcBpMemberDetail> betUserIdDetailList(Map<String, String> map);
	
	/**
	 * 判断积分是否足够
	 * @param userId
	 * @param totalNum
	 * @return
	 */
//	boolean checkIntegral(String userId,Long totalNum);
	
	/**
	 * 针对于积分抽奖跟0元抢红包业务的先赠送积分后扣除积分业务，适用方法
	 * @param isPresent
	 * @param userMap
	 * @param sourceMap
	 * @return
	 * @throws Exception
	 */
//	String changeIntegralAndGlobalLockForWallet(boolean isPresent
//			,Map<String, Object>userMap,Map<String, String>sourceMap) throws Exception;
	
	
//	public void deleteMemberDetailById (Map<String, String> map) throws Exception;
	
	//111
	//插入积分流水明细详情表
	public void insertEcBpMemberdetailExpand(EcBpMemberDetail ecBpMemberDetail, Map<String, Object> userMap) throws Exception;

//	public Integer getOverdueIntegral(String userId);
}
